home *** CD-ROM | disk | FTP | other *** search
- #!/usr/local/bin/perl5
- #
- # version 3, Tue Apr 4 8:58:13 1995, last mod by wietse
- #
-
- $running_under_satan = 1;
-
- require 'config/version.pl';
- require 'config/satan.cf';
- require 'perl/satan-data.pl';
- require 'perl/run-satan.pl';
- require 'perl/misc.pl';
- require 'perllib/getopts.pl'; # IRIX needs it at the end.
-
- #
- # Defaults are taken from the config file. There are three ways to control
- # operation: from the command line, from the satan.cf file, and from the
- # HTML user interface. That's a bit much.
- #
- $opt_a = $attack_level;
- $opt_A = $proximity_descent;
- $opt_d = $satan_data;
- $opt_l = $max_proximity_level;
- $opt_o = $only_attack_these;
- $opt_O = $dont_attack_these;
- $opt_s = $attack_proximate_subnets;
- $opt_S = $status_file;
- $opt_t = 1;
- $opt_u = $untrusted_host;
- $opt_v = 0;
- $opt_z = $sub_zero_proximity;
-
- #
- # Parse JCL.
- #
- $usage = "usage: $0 [options] [targets...]
-
- Enters interactive mode when no target host is specified.
-
- -a attack level (0=light, 1=normal, 2=heavy, default $opt_a)
- -A proximity descent (default $opt_A)
- -c list change variables (list format: \"name=value; name=value; ...\")
- -d database data directory (default $opt_d)
- -i ignore existing results
- -l proximity maximal proximity level (default $opt_l)
- -o list scan only these (default '$opt_o')
- -O list stay away from these (default '$opt_O')
- -s expand primary hosts to subnets
- -S status_file pathname with scanning status file (default $opt_S)
- -t level timeout (0 = short, 1 = medium, 2 = long, default $opt_t)
- -u running from an untrusted host (for rsh/nfs tests)
- -U running from a trusted host (for rsh/nfs tests)
- -v turn on debugging output
- -V print version number
- -z when attack level becomes negative, continue at level 0
- -Z stop at attack level 0
- ";
-
- &Getopts("a:A:c:d:e:il:o:O:sS:t:uUvVzZ") || die $usage;
-
- if ($opt_V) {
- print "SATAN version $satan_version\n";
- exit 0;
- }
-
- # The power of PERL never stops to amaze me - Wietse
- for (split(/\s*;\s*/, $opt_c)) {
- ${$name} = $value if ($name, $value) = split(/\s*=\s*/, $_, 2);
- }
-
- print "SATAN is starting up....\n" if $#ARGV < 0;
-
- $debug = $opt_v;
-
- @all_attacks = (\@light, \@normal, \@heavy);
- die "bad attack level: $opt_a\n" unless $all_attacks[$opt_a];
- $attack_level = $opt_a;
-
- $satan_data = $opt_d;
-
- $max_proximity_level = $opt_l;
- $proximity_descent = $opt_A;
- $sub_zero_proximity = $opt_z;
- $sub_zero_proximity = 0 if $opt_Z;
-
- $only_attack_these = $opt_o;
- $dont_attack_these = $opt_O;
-
- $attack_proximate_subnets = $opt_s;
- $status_file = $opt_S;
-
- @all_timeouts = ($short_timeout, $med_timeout, $long_timeout);
- die "bad timeout: $opt_t\n" unless $all_timeouts[$opt_t];
- $timeout = $all_timeouts[$opt_t];
-
- $untrusted_host = $opt_u;
- $untrusted_host = 0 if $opt_U;
-
- umask 077; # DON'T TAKE THIS OUT!!!
-
- if ($#ARGV < 0) {
- #
- # The HTML driver will eventually invoke init_satan() and run_satan().
- #
- require 'perl/html.pl';
- &html();
- } else {
- &init_satan_data();
- &read_satan_data() unless defined($opt_i);
- &run_satan(join(' ', @ARGV));
- }
-
-